import time
import string
import random
from datetime import datetime


def generate_random_string(length=10):
    """生成随机字符串"""
    characters = string.ascii_letters + string.digits  # 大小写字母 + 数字
    return ''.join(random.sample(characters, k=length))


def generate_timestamp():
    """生成时间戳"""
    now = datetime.now()
    timestamp = now.strftime("%y%m%d%H%M%S")
    return timestamp


def generate_order_no(prefix="PAY"):
    """生成订单号"""
    now = datetime.now()
    date_part = now.strftime("%y%m%d")  # 日期：231015（23年10月15日）
    time_part = now.strftime("%H%M%S")  # 时间：142305（14点23分05秒）
    timestamp = str(int(time.time() * 10000))
    return f"{prefix}-{date_part}-{time_part}-{timestamp}"


def sort_dict_prefix_keys(d, prefix="P"):
    """根据key对字典进行排序"""
    # 分离键：提取P开头的数字键和其他键
    prefix_keys = []
    other_keys = []
    for key in d.keys():
        if key.startswith(prefix) and '_' in key:
            prefix_keys.append(key)
        else:
            other_keys.append(key)
    
    # 对P键按数字排序，其他键按字母排序
    prefix_lenght = len(prefix)
    sorted_prefix_keys = sorted(prefix_keys, key=lambda x: int(x.split('_')[0][prefix_lenght:]))
    sorted_other_keys = sorted(other_keys)
    
    # 合并键列表：P键在前 + 其他键在后
    sorted_keys = sorted_prefix_keys + sorted_other_keys
    
    # 返回按新键顺序构建的字典
    return {k: d[k] for k in sorted_keys}
